一、设备分享管理
设备的分享管理包括以下几部分:
- 将设备分享给其它用户
- 分享消息推送
- 处理分享消息
分享设备相关的所有操作并不完全都依赖于任务完成,有一些需要通过 http 接口获取数据,如设备的分享记录或列表;
相关分享接口请查看OPEN-API-设备功能
1、分享设备
通过 XLinkShareDeviceTask 可以将设备权限分享给其他在平台里已经注册的用户。
// 新建XLinkShareDeviceTask
XLinkShareDeviceTask task = XLinkShareDeviceTask.newBuilder()
// 要分享出去的设备
.setXDevice(device.getXDevice())
// 分享模式
.setMode(XLinkRestfulEnum.ShareMode.ACCOUNT)
// 被分享者的账号
.setAccount(account)
// 该次分享有效期,单位秒,默认为 7200
.setExpired(expired)
// 设备的操作权限,默认允许读写
.setAuthority(XLinkRestfulEnum.DeviceAuthority.RW)
.setListener(new XLinkTaskListener<DeviceApi.ShareDeviceResponse>() {
@Override
public void onError(@NotNull XLinkCoreException exception) {
}
@Override
public void onStart() {
}
@Override
public void onComplete(DeviceApi.ShareDeviceResponse response) {
//从结果中获取邀请码
String invitedCode = response.inviteCode;
}
)
.build();
XLinkSDK.startTask(task);
- 分享的模式类型
类型 | 说明 |
---|---|
XLinkRestfulEnum.ShareMode.ACCOUNT | 通过用户ID分享 |
XLinkRestfulEnum.ShareMode.QR_CODE | 二维码方式分享 |
XLinkRestfulEnum.ShareMode.EMAIL | 邮件方式分享 |
- 设备操作权限
类型 | 说明 |
---|---|
XLinkRestfulEnum.DeviceAuthority.R | 只读 |
XLinkRestfulEnum.DeviceAuthority.W | 只写 |
XLinkRestfulEnum.DeviceAuthority.RW | 可读写 |
2、分享消息推送
当接受分享方在线时,对方的 XLinkCloudListener 中的 onEventNotify 会收到类型为 EventNotify.MSG_TYPE_DEVICE_SHARE
的通知:
public void onEventNotify(EventNotify eventNotify) {
//当SDK连接上云端,并接收到云端推送时,会回调这个方法
switch (eventNotify.messageType) {
case EventNotify.MSG_TYPE_DEVICE_SHARE:
//收到分享请求
handleDeviceShareNotify(eventNotify);
break;
....
}
}
注意:分享仅会有 EventNotify 的通知,设备订阅状态变更
onDeviceChanged()
的回调。
由于分享的设备还不存在当前用户的维护列表中,是无法回调通知设备状态发送了变化的
开发者可通过 EventNotifyHelper 来获取分享的类型,如下所示:
private void handleDeviceShareNotify(EventNotify eventNotify) {
//解析出设备分析事件
final EventNotifyHelper.DeviceShareNotify notify = EventNotifyHelper.parseDeviceShareNotify(eventNotify.payload);
Log.d(TAG, "handleDeviceShareNotify: " + notify);
...
switch (notify.type) {
//收到新的分享
case EventNotifyHelper.DeviceShareNotify.TYPE_RECV_SHARE:
...
break;
// 发出去的分享被接受
case EventNotifyHelper.DeviceShareNotify.TYPE_ACCEPT_SHARE:
...
break;
// 原有的分享被取消
case EventNotifyHelper.DeviceShareNotify.TYPE_CANCEL_SHARE:
...
break;
// 发出去的分享被拒绝
case EventNotifyHelper.DeviceShareNotify.TYPE_DENY_SHARE:
...
break;
}
}
3、处理分享消息
开发者可以使用 XLinkHandleShareDeviceTask 对分享进行处理,如下所示:
XLinkHandleShareDeviceTask task = XLinkHandleShareDeviceTask.newBuilder()
// 接受该次分享
.setAction(action)
// 待处理的分享的id
.setInviteCode(notify.invite_code)
// 当前用户的uid
.setUid(XLinkUserManager.getInstance().getUid())
.setListener(xxx)
.build();
XLinkSDK.startTask(task);
其中 Action 为分享处理的行为:
行为 | 操作对象 | 说明 |
---|---|---|
XLinkHandleShareDeviceTask.Action.ACCEPT | 被分享者 | 接受该次分享 |
XLinkHandleShareDeviceTask.Action.ACCEPT_QRCODE | 被分享者 | 接受该次二维码分享 |
XLinkHandleShareDeviceTask.Action.DENY | 被分享者 | 拒绝这次分享 |
XLinkHandleShareDeviceTask.Action.CANCEL | 发起分享者 | 取消已经分享出去的分享记录 |
XLinkHandleShareDeviceTask.Action.DELETE | 被分享者或发起分享者 | 删除该次分享记录 |
详情可参考 demo 中关于设备分享部分的代码及注释
4、分享记录状态说明
当分享一个设备或接收到一个分享请求时,该用户都会产生一条分享记录。分享记录的状态如下:
值 | 类型 | 说明 |
---|---|---|
accept | string | 已接收 |
cancel | string | 已取消 |
deny | string | 已拒绝 |
invalid | string | 无效的请求 |
overtime | string | 超时 |
pending | string | 等待接收 |
unsubscribed | string | 设备已取消订阅,前一个状态必须是Accept |
状态的部分变更参考说明如下:
- 用户1分享设备给用户2,用户2未处理时,状态为
pending
;用户1删除设备后,分享记录状态不变;用户2再进行分享记录处理时,提示分享记录无效,状态为invalid
- 用户1分享设备给用户2,用户2接受,状态为
accpet
;用户1删除设备后,分享记录状态变更为cancel
- 用户1分享设备给用户2,用户2接受,状态为
accpet
;用户2删除设备后,分享记录状态变更为unsubscribed
二、更新说明
日期 | 更新内容 |
---|---|
2019-01-16 | 新增分享记录状态及部分状态变更说明 |